From: Stefano Facchini Date: Wed, 15 Feb 2012 15:16:23 +0000 (+0100) Subject: main, lightbox: Fix lightbox for zoomed windows X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~1013^2^2~7034 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=0c2037875a9368134ae3c7b7b97e67033b8801d1;p=gnome-shell.git main, lightbox: Fix lightbox for zoomed windows The correct way to make an actor having the same size as another is a ClutterBindConstraint. Connecting to 'allocation-changed' fails because the allocation might not change even when 'width' and 'height' properties do. This is the case of Main.uiGroup, used as parent container for zoomed window clones. In lightbox.js we bind also the position because in principle it could change, even if currently only fullscreen lightboxes are used. --- diff --git a/js/ui/lightbox.js b/js/ui/lightbox.js index f8c84627f..aa1516094 100644 --- a/js/ui/lightbox.js +++ b/js/ui/lightbox.js @@ -1,5 +1,6 @@ // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- +const Clutter = imports.gi.Clutter; const Lang = imports.lang; const Meta = imports.gi.Meta; const St = imports.gi.St; @@ -57,11 +58,10 @@ const Lightbox = new Lang.Class({ if (params.width && params.height) { this.actor.width = params.width; this.actor.height = params.height; - this._allocationChangedSignalId = 0; } else { - this.actor.width = container.width; - this.actor.height = container.height; - this._allocationChangedSignalId = container.connect('allocation-changed', Lang.bind(this, this._allocationChanged)); + let constraint = new Clutter.BindConstraint({ source: container, + coordinate: Clutter.BindCoordinate.ALL }); + this.actor.add_constraint(constraint); } this._actorAddedSignalId = container.connect('actor-added', Lang.bind(this, this._actorAdded)); @@ -70,16 +70,6 @@ const Lightbox = new Lang.Class({ this._highlighted = null; }, - _allocationChanged : function(container, box, flags) { - Meta.later_add(Meta.LaterType.BEFORE_REDRAW, Lang.bind(this, function() { - this.actor.width = this.width; - this.actor.height = this.height; - return false; - })); - this.width = this._container.width; - this.height = this._container.height; - }, - _actorAdded : function(container, newChild) { let children = this._container.get_children(); let myIndex = children.indexOf(this.actor); @@ -187,8 +177,6 @@ const Lightbox = new Lang.Class({ * by destroying its container or by explicitly calling this.destroy(). */ _onDestroy: function() { - if (this._allocationChangedSignalId != 0) - this._container.disconnect(this._allocationChangedSignalId); this._container.disconnect(this._actorAddedSignalId); this._container.disconnect(this._actorRemovedSignalId); diff --git a/js/ui/main.js b/js/ui/main.js index 6b7218b71..6d8f4acf0 100644 --- a/js/ui/main.js +++ b/js/ui/main.js @@ -187,6 +187,9 @@ function start() { for (let i = 0; i < children.length; i++) children[i].allocate_preferred_size(flags); }); + let constraint = new Clutter.BindConstraint({ source: global.stage, + coordinate: Clutter.BindCoordinate.SIZE }); + uiGroup.add_constraint(constraint); St.set_ui_root(global.stage, uiGroup); global.window_group.reparent(uiGroup); global.overlay_group.reparent(uiGroup);